#include <stdio.h> 
#include <stdlib.h>
#include <sys/types.h> 
#include <sys/wait.h> 

int main(int argc, char *argv[]) 
{ 
	//Contador de procesos hijo	
	int i=1;
	//Contador de procesos hijo por crear
	int n=0;
	//Codigo de retorno de la función fork	
	pid_t hijo;
	//Variable para almacenar el estado de un subproceso
	int estado;
	//Si nos han pasado argumentos	
	if (argc>1) {
		//Los guardamos en la variable n
		n=atoi(argv[1])-1;	
	}	
	//Mostramos la información del proceso padre
	printf("PADRE PID:%d, PPID: %d\n", getpid(), getppid());  	
	//Bucle de creación de subprocesos hijo
	while (n!=0) {
	//Llamada a fork
	hijo=fork();	
		//Si la variable hijo tiene valor 0 es que estamos en un subproceso hijo
		if (hijo==0) {
		//Mostramos su información y rompemos la ejecución	
		printf("HIJO %d PID:%d, PPID: %d\n",i, getpid(), getppid());  
		break;
		}	
	//Esperamos a que el subproceso creado acabe (si acaba antes el proceso padre, el proceso hijo no muestra correctamente
	//su PPID, es decir se queda colgando el INIT)
	wait(&estado);	
	//Decrementamos el numero de subprocesos por crear (esto solo lo ejecuta el proceso padre)	
	n--;
	//Incrementamos el contador de subprocesos creados (esto solo lo ejecuta el proceso padre)
	i++;
	}
	
}
